/*?
? 设计一个函数，该函数的参数为可同时发送请求的大小，返回一个函数，该函数的参数为要请求的 url。 实现的效果为，同时发送 n 个请求，当有请求返回后往请求队列里 push 新的请求，并输出刚刚结束的请求的返回值
? 就是异步并发控制
? */


async function asyncPool2(size,data,fn) {
    //? 并发池
    let poolList = []
    //? 结果
    let res = []
    for (let item of data) {
        let p = Promise.resolve(fn(item))
        res.push(p)
        let _p = p.then(() => poolList.splice(poolList.indexOf(_p),1))
        poolList.push(_p)
        if (poolList.length >= size) {
            await Promise.race(poolList)
        }
    }
    return Promise.all(res) //? 返回任务执行结果
}
